package Modelo.Patrocinador;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

import Util.ExcecaoInstanciaNaoEncontrada;

public class PatrocinadorDao {
	
	private String cnpjPatrocinador;
	private String razaoSocialPatrocinador;
	private String nomeFantasiaPatrocinador;
	private String enderecoPatrocinador;
	
	
	public PatrocinadorDao() {
		super();
	}
	public Patrocinador adicionarPatrocinador(Connection connection,Patrocinador patrocinador){
		/* Criar "queryString". 
		 * Interrogacoes serao os parametros passados ao objeto
		 * preparedStatement*/
		String queryString = "INSERT INTO Patrocinador"
				+ " ( cnpjPatrocinador, razaoSocialPatrocinador,"
				+ " nomeFantasiaPatrocinador, enderecoPatrocinador)"
				+ " VALUES (?, ?, ?, ?)";
		//Objeto que ira enviar a querrystring ao banco de dados
		try (PreparedStatement preparedStatement = connection.prepareStatement(queryString)) {

			int i = 1;
			int insertedRows = 0;
			//Coloca os parametros na mesma ordem indicada na querrystring
			preparedStatement.setString(i++, patrocinador.getCnpjPatrocinador());
			preparedStatement.setString(i++, patrocinador.getRazaoSocialPatrocinador());
			preparedStatement.setString(i++, patrocinador.getNomeFantasiaPatrocinador());
			preparedStatement.setString(i++, patrocinador.getEnderecoPatrocinador());
			insertedRows = preparedStatement.executeUpdate(); //Executa o comando SQL

			if (insertedRows == 0) {
				throw new SQLException("Can not add row to table 'PessoaIntern'");
			}

			if (insertedRows > 1) {
				throw new SQLException("Duplicate row in table 'PessoaIntern'");
			}

			return new Patrocinador(patrocinador.getCnpjPatrocinador(), 
					patrocinador.getRazaoSocialPatrocinador(), 
					patrocinador.getNomeFantasiaPatrocinador(), 
					patrocinador.getEnderecoPatrocinador());
			
			
		} catch (SQLException e) {
			throw new RuntimeException(e);
		}
	}
	
	public Patrocinador buscarPatrocinador(Connection connection, String cnpjPatrocinador)
			throws ExcecaoInstanciaNaoEncontrada{
		
		
		String queryString = "SELECT razaoSocialPatrocinador,"
				+ "nomeFantasiaPatrocinador, enderecoPatrocinador" +
				" FROM Patrocinador WHERE cnpjPatrocinador = ?";
		
		try (java.sql.PreparedStatement preparedStatement = connection.prepareStatement(queryString)) {

			int i = 1;
			preparedStatement.setString(i++, cnpjPatrocinador);
			//Pega os Resultados da busca
			ResultSet resultSet = preparedStatement.executeQuery();

			if(!resultSet.next()){
				throw new ExcecaoInstanciaNaoEncontrada(cnpjPatrocinador, "Patrocinador");

			}
			
			i = 1;
			String razaoSocialPatrocinador = resultSet.getString(i++);
			String nomeFantasiaPatrocinador = resultSet.getString(i++);
			String enderecoPatrocinador = resultSet.getString(i++);
			return new Patrocinador(cnpjPatrocinador, razaoSocialPatrocinador,
					nomeFantasiaPatrocinador, enderecoPatrocinador);


		} catch (SQLException e) {
			throw new RuntimeException(e);
		}
	}
	public void removerPatrocinador(Connection connection, String cnpjPatrocinador)
			throws ExcecaoInstanciaNaoEncontrada{
		String queryString = "DELETE FROM Patrocinador WHERE cnpjPatrocinador = ?";

		try (java.sql.PreparedStatement preparedStatement = connection.prepareStatement(queryString)) {
			int i = 1;
			preparedStatement.setString(i++, cnpjPatrocinador);

			int removedRows = preparedStatement.executeUpdate();

			if(removedRows == 0){
				throw new ExcecaoInstanciaNaoEncontrada(cnpjPatrocinador, "Patrocinador");
			}

		} catch (SQLException e) {
			throw new RuntimeException(e);
		}

	}
	public void updatePatrocinador(Connection connection, Patrocinador patrocinador) 
			throws ExcecaoInstanciaNaoEncontrada {

		int updateRows = 0;

		String queryString = "UPDATE Patrocinador "
				+ "SET razaoSocialPatrocinador = ?, nomeFantasiaPatrocinador = ?"
				+ ", enderecoPatrocinador = ? WHERE cnpjPatrocinador = ?";

		try (java.sql.PreparedStatement preparedStatement = connection.prepareStatement(queryString)){
			int i = 1;
			preparedStatement.setString(i++, patrocinador.getRazaoSocialPatrocinador());
			preparedStatement.setString(i++, patrocinador.getNomeFantasiaPatrocinador());
			preparedStatement.setString(i++, patrocinador.getEnderecoPatrocinador());
			preparedStatement.setString(i++, patrocinador.getCnpjPatrocinador());
			updateRows = preparedStatement.executeUpdate();

			if(updateRows == 0){
				throw new ExcecaoInstanciaNaoEncontrada(patrocinador.getCnpjPatrocinador(), 
						"Patrocinador");
			}

			else if(updateRows > 1){
				throw new SQLException("Linha duplicada para o identificador = '" + "' "
						+ "na tabela 'Patrocinador'");
			}


		} catch (SQLException e) {
			throw new RuntimeException(e);
		}


	}
	
	public List<Patrocinador> buscarTodosPatrocinadores(Connection connection) {
		
		String queryString = "SELECT * FROM Patrocinador";

		try (java.sql.PreparedStatement preparedStatement = connection.prepareStatement(queryString)) {
						
			ResultSet resultSet = preparedStatement.executeQuery();
			List<Patrocinador> patrocinadores = new ArrayList<Patrocinador>();

			while(resultSet.next()){
				int i = 1;
				
				this.cnpjPatrocinador = resultSet.getString(i++);
				this.razaoSocialPatrocinador = resultSet.getString(i++);
				this.nomeFantasiaPatrocinador = resultSet.getString(i++);
				this.enderecoPatrocinador = resultSet.getString(i++);
				
				patrocinadores.add(new Patrocinador(cnpjPatrocinador, razaoSocialPatrocinador, nomeFantasiaPatrocinador, enderecoPatrocinador));				
			}
			return patrocinadores;

		} catch (SQLException e) {
			throw new RuntimeException(e);
		}
	}
}
